package DAO;

import AccesoBD.AccesoBaseDatos;
import Dominio.Asignatura;
import Dominio.Semestre;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DAOSemestres {
    private Connection conexion = null;
    public static final String TABLA_SEMESTRES = "semestres";
    public static final String COLUMNA_NO_SEMESTRE = "numeroDeSemestre";
    public static final String COLUMNA_CVE_RET = "clave_ret_acad";
    public static final String COLUMNA_NOMBRE = "nombre";
    private AccesoBaseDatos acceso = new AccesoBaseDatos();    
    
    public DAOSemestres(){
        this.conexion = this.acceso.abrirConexion();
    }
    
    public Semestre registraSemestre(Semestre semestre){
        try{
            String queryInsert = "INSERT INTO "+TABLA_SEMESTRES+" ("+COLUMNA_NO_SEMESTRE+","+COLUMNA_NOMBRE+","+COLUMNA_CVE_RET+")"
                    + " VALUES ('"+semestre.getNumeroDeSemestre()+"','"+semestre.getNombre()+"','"+semestre.getClaveReticula()+"')";
            PreparedStatement sentencia = conexion.prepareStatement(queryInsert, Statement.RETURN_GENERATED_KEYS);
            int afectados = sentencia.executeUpdate();
            if(afectados == 0){
                throw new SQLException();
            }else{
                ResultSet generado = sentencia.getGeneratedKeys();
                if(generado.next()){
                    semestre.setClave_semestre(generado.getInt(1));
                    return semestre;
                }else{
                    throw new SQLException();
                }
            }
        }catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de registrar la retícula");
        }
        return null;
    }
    
    public ArrayList<Semestre> obtenerSemestresReticula(int claveReticula){
        ArrayList<Semestre> semestres = new ArrayList<Semestre>();
        try {    
            DAOAsignaturaReticula daoAsignaturaReticula = new DAOAsignaturaReticula();
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String query ="SELECT * FROM "+TABLA_SEMESTRES+" WHERE "+COLUMNA_CVE_RET+"='"+claveReticula+"'";
            ResultSet resultado = sentencia.executeQuery(query);
            while(resultado.next()){
                int claveSemestre = resultado.getInt(1);
                int numeroSemestre = resultado.getInt(2);
                String nombre = resultado.getString(3);
                ArrayList<Asignatura> asignaturas = daoAsignaturaReticula.obtenerAsignaturasDeSemestre(claveSemestre);
                Semestre s = new Semestre(claveSemestre, numeroSemestre, nombre, asignaturas, claveReticula);
                semestres.add(s);
            }
            return semestres;
        } catch (SQLException ex) {
            Logger.getLogger(DAOSemestres.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
     public ArrayList <Integer> obtenerClavesSemestre(int claveRA){
        ArrayList<Integer> listaClavesSemestre = new ArrayList();
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
                String query ="SELECT * FROM "+TABLA_SEMESTRES+" WHERE "+COLUMNA_CVE_RET+"='"+claveRA+"'";
                ResultSet resultado = sentencia.executeQuery(query);
           while(resultado.next()){
           int claveSemestre = resultado.getInt(1);
           listaClavesSemestre.add(claveSemestre);
           }
        } catch (SQLException ex) {
            Logger.getLogger(DAOSemestres.class.getName()).log(Level.SEVERE, null, ex);
        }
     return listaClavesSemestre;
    }
}
